const XLSX = require('xlsx');
const fs = require('fs');

// 将 JSON 转换为 XLSX 文件，并修改首行列名
function jsonToXlsx(jsonData, outputFilePath) {
  // 确保 jsonData 是一个数组
  if (!Array.isArray(jsonData)) {
    jsonData = [jsonData];  // 如果是对象，包装成数组
  }

  // 定义 JSON 字段名和 Excel 列名之间的映射关系
  const columnMapping = {
    "id": "ID",
    "protocolid": "协议ID",
    "protocolName": "协议名",
    "name": "名称",
    "error": "错误信息",
    "description": "错误中文提示",
    "matchContent": "匹配内容",
    "tag": "标签",
    "platform": "平台"
  };

  // 将 JSON 数据转为工作表
  const ws = XLSX.utils.json_to_sheet(jsonData);

  // 自定义首行列名
  const headers = Object.values(columnMapping); // 新列名
  const headerKeys = Object.keys(columnMapping); // 对应 JSON 字段名

  // 插入自定义列名
  const headerRow = {};
  headerKeys.forEach((key, index) => {
    const cellRef = XLSX.utils.encode_cell({ r: 0, c: index }); // 创建单元格地址 (如 A1, B1)
    headerRow[cellRef] = { v: headers[index] }; // 设置单元格的值为新列名
  });

  // 将列名插入工作表
  Object.assign(ws, headerRow);
  ws['!ref'] = XLSX.utils.encode_range({ s: { r: 0, c: 0 }, e: { r: jsonData.length, c: headers.length - 1 } });

  // 将工作表写入文件
  const wb = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(wb, ws, '错误知识库');  // 可以修改工作表名称
  XLSX.writeFile(wb, outputFilePath);

  console.log('XLSX file has been saved to ' + outputFilePath);
}

// 主程序
function main() {
  const inputJsonPath = 'D:/errorKnowledge2.json'; // 输入的 JSON 文件路径
  const outputFilePath = 'D:/output.xlsx'; // 输出的 XLSX 文件路径

  // 读取 JSON 数据
  const jsonData = JSON.parse(fs.readFileSync(inputJsonPath, 'utf-8'));

  // 将 JSON 数据转成 XLSX 文件并修改首行列名
  jsonToXlsx(jsonData, outputFilePath);
}

main();
